package dto

import (
	"encoding/json"
	"fmt"
	"strings"
)

type RechargeCreateDto interface {
	String() string
	DbString() string
}

// 客户信息
type RechargeUserInfoDto struct {
	Phone       string  `json:"phone,omitempty"`
	Name        string  `json:"name,omitempty"`
	IsNull      bool    `json:"-"`
	UsdtAddress string  `json:"usdt_address,omitempty"`
	UsdtAmount  float64 `json:"usdt_amount,omitempty"`
}

func (d RechargeUserInfoDto) String() string {
	if d.IsNull {
		return "{}"
	}

	data, _ := json.Marshal(d)
	return string(data)
}

func (d RechargeUserInfoDto) DbString() string {
	return d.String()
}

// 客户信息
type RechargeBankUPIDto struct {
	DtoStr RechargeCreateDto
}

func (d RechargeBankUPIDto) String() string {
	return d.DtoStr.String()
}

func (d RechargeBankUPIDto) DbString() string {
	return d.DtoStr.DbString()
}

type BankUPILocalUsdtDto struct {
	UsdtType    string `json:"usdt_type"`
	UsdtAddress string `json:"usdt_address"`
}

func (d BankUPILocalUsdtDto) String() string {
	data, _ := json.Marshal(d)
	return string(data)
}

func (d BankUPILocalUsdtDto) DbString() string {
	res := fmt.Sprintf("%s|%s", d.UsdtType, d.UsdtAddress)
	return res
}

func NewBankUPILocalUsdtDto(data string) BankUPILocalUsdtDto {
	var (
		res = BankUPILocalUsdtDto{}
	)
	res.UsdtType, res.UsdtAddress, _ = strings.Cut(data, "|")

	return res
}

type BankUPIDefaultDto struct {
}

func (d BankUPIDefaultDto) String() string {
	return ""
}

func (d BankUPIDefaultDto) DbString() string {
	return ""
}
